Java Technologies BigInteger এবং BigDecimal এর জন্য Comparison Methods (compareTo, equals) গাইড ও নোট

311

BigInteger এবং BigDecimal হল java.math প্যাকেজের দুটি ক্লাস, যা খুব বড় সংখ্যা (arbitrary precision numbers) পরিচালনা করতে ব্যবহৃত হয়। এই ক্লাসগুলির মধ্যে Comparison (তুলনা) করার জন্য বিভিন্ন মেথড যেমন compareTo() এবং equals() ব্যবহার করা হয়।

BigInteger এবং BigDecimal Comparison Methods

1. compareTo() Method:

compareTo() মেথডটি দুটি BigInteger বা BigDecimal অবজেক্টের মধ্যে তুলনা করার জন্য ব্যবহৃত হয়। এটি একটি integer মান ফেরত দেয়:

  • 0 ফেরত দেয় যদি দুইটি সংখ্যা সমান হয়।
  • -1 ফেরত দেয় যদি প্রথম সংখ্যা দ্বিতীয় সংখ্যার চেয়ে ছোট হয়।
  • 1 ফেরত দেয় যদি প্রথম সংখ্যা দ্বিতীয় সংখ্যার চেয়ে বড় হয়।

Syntax:

int compareTo(T anotherBigInteger) // For BigInteger
int compareTo(BigDecimal anotherBigDecimal) // For BigDecimal

2. equals() Method:

equals() মেথডটি দুটি BigInteger বা BigDecimal অবজেক্টের মধ্যে সঠিক সমতা যাচাই করে। এটি true ফেরত দেয় যদি দুটি সংখ্যা একে অপরের সমান হয়, এবং false ফেরত দেয় যদি তারা সমান না হয়।

Syntax:

boolean equals(Object obj) // For BigInteger
boolean equals(Object obj) // For BigDecimal

BigInteger এবং BigDecimal Comparison Example:

1. BigInteger Comparison:

import java.math.BigInteger;

public class BigIntegerComparison {
    public static void main(String[] args) {
        // Create BigInteger objects
        BigInteger num1 = new BigInteger("123456789");
        BigInteger num2 = new BigInteger("987654321");
        BigInteger num3 = new BigInteger("123456789");
        
        // Compare num1 and num2
        System.out.println("num1 compareTo num2: " + num1.compareTo(num2)); // -1 (num1 < num2)
        
        // Compare num1 and num3
        System.out.println("num1 compareTo num3: " + num1.compareTo(num3)); // 0 (num1 == num3)
        
        // Use equals method
        System.out.println("num1 equals num2: " + num1.equals(num2)); // false
        System.out.println("num1 equals num3: " + num1.equals(num3)); // true
    }
}

Output:

num1 compareTo num2: -1
num1 compareTo num3: 0
num1 equals num2: false
num1 equals num3: true

2. BigDecimal Comparison:

import java.math.BigDecimal;

public class BigDecimalComparison {
    public static void main(String[] args) {
        // Create BigDecimal objects
        BigDecimal bd1 = new BigDecimal("123.45");
        BigDecimal bd2 = new BigDecimal("987.65");
        BigDecimal bd3 = new BigDecimal("123.45");
        
        // Compare bd1 and bd2
        System.out.println("bd1 compareTo bd2: " + bd1.compareTo(bd2)); // -1 (bd1 < bd2)
        
        // Compare bd1 and bd3
        System.out.println("bd1 compareTo bd3: " + bd1.compareTo(bd3)); // 0 (bd1 == bd3)
        
        // Use equals method
        System.out.println("bd1 equals bd2: " + bd1.equals(bd2)); // false
        System.out.println("bd1 equals bd3: " + bd1.equals(bd3)); // true
    }
}

Output:

bd1 compareTo bd2: -1
bd1 compareTo bd3: 0
bd1 equals bd2: false
bd1 equals bd3: true

Key Differences Between compareTo() and equals() for BigInteger and BigDecimal

  1. compareTo():
    • এটি অসংখ্য সঠিকতা এবং পূর্ণসংখ্যার আকার অনুযায়ী তুলনা করে।
    • compareTo() মেথডটি BigInteger বা BigDecimal এর মানের সাইজ (value) এবং সঠিকতা (precision) অনুযায়ী তুলনা করে।
    • compareTo() কখনো 0, -1, অথবা 1 রিটার্ন করে, যা প্রতিফলিত করে যে সংখ্যাটি ছোট, সমান, অথবা বড়।
  2. equals():
    • এটি তুলনা করে শুধুমাত্র মানের (value) এবং পূর্নসংখ্যার সঠিকতা (scale)।
    • equals() মেথডটি শুধুমাত্র তখন true ফেরত দেয়, যখন দুটি BigInteger বা BigDecimal অবজেক্টের মান এবং স্কেল একই হবে।

Special Consideration for BigDecimal:

BigDecimal ক্লাসে scale (ডেসিমাল পয়েন্টের অবস্থান) বিষয়টি খুবই গুরুত্বপূর্ণ, এবং equals() মেথড scale এর তুলনা করে। ফলে, দুটি BigDecimal যদি মানে সমান হলেও তাদের স্কেল আলাদা থাকে, তবে equals() false ফেরত দিতে পারে।

Example: BigDecimal scale effect on equals() method:

import java.math.BigDecimal;

public class BigDecimalScaleEffect {
    public static void main(String[] args) {
        BigDecimal bd1 = new BigDecimal("123.45");
        BigDecimal bd2 = new BigDecimal("123.4500");
        
        // Check equality
        System.out.println("bd1 equals bd2: " + bd1.equals(bd2)); // false
        
        // Check comparison
        System.out.println("bd1 compareTo bd2: " + bd1.compareTo(bd2)); // 0 (bd1 == bd2)
    }
}

Output:

bd1 equals bd2: false
bd1 compareTo bd2: 0

ব্যাখ্যা:

  • equals() মেথডে scale (ডেসিমাল পয়েন্টের পরিমাণ) তুলনা করা হয়, এবং এটি যদি ভিন্ন হয়, তবে এটি false রিটার্ন করে।
  • তবে compareTo() কেবলমাত্র value তুলনা করে, তাই এখানে দুটি BigDecimal সমান হিসেবে গণ্য হয়েছে।

  • compareTo() মেথডটি ভ্যালু বা মানের তুলনা করে, এবং এর ফলাফল হিসেবে 0, -1, বা 1 ফেরত দেয়।
  • equals() মেথডটি ভ্যালু এবং স্কেল (precision) তুলনা করে এবং শুধুমাত্র তখনই true ফেরত দেয় যখন দুটি সংখ্যা সমান এবং স্কেল একেবারে একই হয়।
  • BigDecimal এর ক্ষেত্রে scale তত্ত্বটি গুরুত্বপূর্ন, কারণ স্কেল পরিবর্তিত হলে equals() মেথড false ফেরত দিতে পারে, কিন্তু compareTo() সঠিক মান তুলনা করে 0 ফেরত দেবে।
Content added By
Promotion

Are you sure to start over?

Loading...